﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace sy3_3
{
    // 基类：矩形类 Rect
    class Rect
    {
        // 受保护的成员（允许派生类访问）：长、宽
        protected float length, width;

        // 无参构造函数（重载）
        public Rect() { }

        // 有参构造函数：初始化长和宽
        public Rect(float l, float w)
        {
            length
= l;
            width
= w;
        }

        // 求矩形面积的方法
        public virtual float GetArea()
        {
            return length * width;
        }

        // 求矩形周长的方法
        public float GetPerimeter()
        {
            return 2 * (length + width);
        }
    }

    // 派生类：矩体类 Cubold（继承自 Rect）
    class Cubold : Rect
    {
        // 新增成员：高
        private float height;

        // 有参构造函数：初始化长、宽（继承自 Rect）和高
        public Cubold(float l, float w, float h) : base(l, w)
        {
            height
= h;
        }

        // 重写基类的 GetArea 方法（求矩体表面积）
        public override float GetArea()
        {
            return 2 * (length * width + length * height + width * height);
        }

        // 求矩体体积的方法
        public float GetVolume()
        {
            return length * width * height;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // 1. 测试矩形类 Rect
            Console
.Write("请输入矩形长：");
            float rectLength = float.Parse(Console.ReadLine());

            Console
.Write("请输入矩形宽：");
            float rectWidth = float.Parse(Console.ReadLine());

            Rect rect = new Rect(rectLength, rectWidth);
            Console
.WriteLine($"解：矩形面积为 {rect.GetArea()} ，周长为 {rect.GetPerimeter()} 。\n");

            // 2. 测试矩体类 Cubold
            Console
.WriteLine("-----在此基础上构造矩体-----");
            Console
.Write("请输入矩体高：");
            float cuboldHeight = float.Parse(Console.ReadLine());

            Cubold cubold = new Cubold(rectLength, rectWidth, cuboldHeight);
            Console
.WriteLine($"解：矩体表面积为 {cubold.GetArea()} ，体积为 {cubold.GetVolume()} 。\n");

            Console
.WriteLine("按任意键结束程序：");
            Console
.ReadKey();
        }
    }
}
